home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
NextAnswers
/
1722_Using_autorelease_pools_without_EOF.rtfd
/
PoolApplication.m
< prev
next >
Wrap
Text File
|
1995-04-28
|
2KB
|
89 lines
/*
* This Application subclass provides support for NSAutoreleasePools.
* If you have an application that uses Foundation but not EOF you
* need to make this class your Application class, otherwise your
* application will have a lot of serious memory leaks.
*
* No guarantee is made for the fitness of this code for any particular
* use. No warranty expressed or implied. Use at your own risk!
*
* Randy Tidd
* NeXT Premium Developer Support
*/
#import "PoolApplication.h"
@implementation PoolApplication : Application
- (void)_setupAutoreleasePool
{
autoreleasePool = [[NSAutoreleasePool alloc] init];
disableCount = 0;
}
+ new
{
id poolApplication;
poolApplication = [super new];
[poolApplication _setupAutoreleasePool];
return poolApplication;
}
/*
* Release the current pool, and create a new one.
*/
- (void)_releasePool
{
if(disableCount<= 0) {
[autoreleasePool release];
autoreleasePool = [[NSAutoreleasePool alloc] init];
}
}
/*
* Release the current pool before and after every event.
*/
- sendEvent:(NXEvent *)event
{
[self _releasePool];
[super sendEvent:event];
[self _releasePool];
return self;
}
/*
* Need to disable the autorelease pool during modal loops otherwise
* objects that are involved in the modal loop will be freed prematurely.
* We need to have a "disable count" rather than a boolean flag because
* we can have nested modal sessions.
*/
- (int)runModalSession:(NXModalSession *)session
{
int retVal;
disableCount++;
retVal = [super runModalSession:session];
disableCount--;
return retVal;
}
- (int)runModalFor:theWindow
{
int retVal;
disableCount++;
retVal = [super runModalFor:theWindow];
disableCount--;
return retVal;
}
@end